/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package org.ejb.controlador.servicioWeb;

import java.io.Serializable;
import java.util.List;
import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import javax.inject.Inject;
import javax.inject.Named;
import org.ejb.controlador.Credenciales;
import org.ejb.controlador.Login;
import org.ejb.negocio.JuegosFacade;
import org.ejb.persistencia.Binjuego;
import org.ejb.persistencia.Juegos;
import org.ejb.persistencia.Xmljuego;

/**
 *
 * @author MoisesAntonio
 */
@SessionScoped
@Named("servicioWebController")
public class servicioWebController implements Serializable{
    
    //Tanto como Credencial, como Login son necesarios para llevar a cabo el acceso al web service.
    @Inject
    Credenciales credencial;
    
    @Inject
    Login login;
    
    //Inyectamos de la capa de negocio JuegosFacade para poder trabajar con la bbdd;
    @EJB
    JuegosFacade ejbFacade;
    
    //Mantenemos el juego que se esté creando como un objeto en memoria.
    Juegos current;
    
    //También podré paginar los resultados para no hacer interminable las llamadas
    //al servicio web:
    
    
    public servicioWebController() {}

    public Credenciales getCredencial() {
        return credencial;
    }

    public void setCredencial(Credenciales credencial) {
        this.credencial = credencial;
    }

    public Login getLogin() {
        return login;
    }

    public void setLogin(Login login) {
        this.login = login;
    }

    public Juegos getCurrent() {
        if (current == null) {
            current = new Juegos();
            //selectedItemIndex = -1;
        }
        return current;
    }

    public void setCurrent(Juegos current) {
        this.current = current;
    }
    
    /**
     * Este método crea el juego con los datos cargados en la variable "current"
     * @return Id del juego, -1 si hay un error en la bbdd.
     */
    public int crearJuego(){
        if(current!=null){
            try {
                ejbFacade.create(current);
                return (ejbFacade.find(current)).getIdJuego();
            }
            catch(Exception e){
                return -1;
            }
        }
        return -1;
    }
    
    /**
     * Este método carga el juego que el usuario quiera modificar o simplemente
     * cargar en el editor.
     * @return id del juego
     */
    public int cargarJuego(){
        if(current!=null){
            try{
                return ejbFacade.find(current).getIdJuego();
            }
            catch(Exception e){
                return -1;
            }
        }
        return -1;
    }
    
    /**
     * Devuelve en crudo la lista XmlJuego
     * @return Lista de los Xml del juego
     */
    public List<Xmljuego> cargarXmlJuego(){
        if(current.getXmljuegoList()!=null){
           return current.getXmljuegoList();
        }
        return null;
    }
    
    /**
     * Devuelve todos los objetos binarios que corresponden al juego, puede ser que esto tarde.
     * @return Lista de todos los binarios (imágenes y sonidos del juego).
     */
    public List<Binjuego> cargarBinJuego(){
        if(current.getBinjuegoList()!=null){
            return current.getBinjuegoList();
        }
        return null;
    }
    
    /**
     * Este método guarda los Xml's de un juego.
     * @param subido Xml's del juego correspondiente
     * @return id del juego, -1 si hay un error de persistencia.
     */
    public int subirXmlJuego(Xmljuego subido){
        
        return -1;
    }
    
    /**
     * Devuelve la lista de juegos que tiene el usuario que se ha autenticado 
     * en el servicio.
     * @return Lista de juegos;
     */
    public List<Juegos> listarJuegos(){
        if(login.getUsuario()!=null){
            login.getUsuario().getJuegosList();
        }
        return null;
    }
    
    /**
     * Para publicar un juego, primero se debe haber cargado el juego a publicar.
     * @param publicar Indicador de publicar (true) o retirar (false).
     * @return Devuelve exactamente lo mismo que le entró.
     */
    public boolean publicarJuego(boolean publicar){
        if(current!=null){
            current.setPublicado(publicar);
            try{
                ejbFacade.edit(current);
                return publicar;
            }
            catch(Exception e){
                return !publicar;
            }
        }
        return !publicar;
    }
    
    
}
